package cn.tedu.mall.search.repository;

import cn.tedu.mall.pojo.search.entity.SpuForElastic;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.elasticsearch.annotations.Query;
import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;
import org.springframework.stereotype.Repository;


// SpuForElastic实体类操作ES的持久层接口
// 这个接口要继承SpringDataElastic提供的一个父接口,父接口中提供了对ES的基本操作
@Repository
public interface SpuForElasticRepository
                       extends ElasticsearchRepository<SpuForElastic,Long> {

    // 自定义查询:title字段包含指定关键字(分词)的spu数据
    Iterable<SpuForElastic> querySpuForElasticsByTitleMatches(String title);


    @Query("{\n" +
            "    \"bool\": {\n" +
            "      \"should\": [\n" +
            "        { \"match\": { \"name\":  \"?0\" }},\n" +
            "        { \"match\": { \"title\": \"?0\"}},\n" +
            "        { \"match\": { \"description\": \"?0\"}},\n" +
            "        { \"match\": { \"category_name\": \"?0\"}}\n" +
            "      ]\n" +
            "    }\n" +
            "  }")
    // 上面指定了查询语句,我们的方法名就可以随意起名了(应遵循基本规范)
    // 运行这个方法,会执行上面的查询语句,语句中?0的位置是占位符
    // 因为我们的查询4个字段条件时同一个分词,所以只需要一个参数,占位符都是?0
    Page<SpuForElastic> querySearch(String keyword, Pageable pageable);
}



